<?php
/**
 * CURL通过GET方法访问
 * @param String $url		访问URL
 * @param Array  $data		参数
 * @param Array  $header	头信息
 * @param String $proxy		代理IP
 * @param int    $timeout	超时时间
 * @return String
 */
function get($url, $data=array(), $header=array(), $proxy=null, $timeout=5)
{
    if (!empty($data) && is_array($data))
        $url .= '?'.http_build_query($data);

    $ch=curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	if (!empty($proxy)){
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($ch,CURLOPT_PROXY,$proxy);
	}
	$content = curl_exec($ch);
	curl_close($ch);
	if ($content === false){
	    throw new Exception(curl_error($ch));
	}
	return $content;
}

/**
 * CURL通过POST方法访问
 * @param String $url		访问URL
 * @param Array  $data		参数
 * @param Array  $header	头信息
 * @param String $proxy		代理IP
 * @param int    $timeout	超时时间
 * @return String
 */

function post($url, $data=array(), $header=array(), $proxy=null, $timeout=5)
{
    $ch=curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
	curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    
    if (!empty($header)) curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	if (!empty($proxy)){
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($ch,CURLOPT_PROXY,$proxy);
	}
	$content = curl_exec($ch);
	curl_close($ch);
	if ($content === false){
	    throw new Exception(curl_error($ch));
	}
	return $content;
}
/**
 * 抓取图片
 *
 * @param string $url
 * @param string $fileName
 * @param boolean $useCurl
 * @param string $proxy 114.113.144.16:80
 * @return string
 */
function getImage($url,$saveDir='./img/',$fileName=null,$useCurl=false,$proxy=null,$timeout=5){
    if (!file_exists($saveDir)) mkdir($saveDir,0777,true);
    if (!is_writable($saveDir)) chmod($saveDir,0777);
    
    if(empty($fileName)){
        $ext=strrchr($url,'.');
        $fileName=10000 * microtime(true).$ext;
    }
    //文件保存路径 
    if($useCurl){
        $img = get($url);
    }else{
	    ob_start(); 
	    readfile($url);
	    $img=ob_get_contents(); 
	    ob_end_clean(); 
    }
    //文件大小
    file_put_contents($saveDir.$fileName,$img);
    return $fileName;
}
/**
 * 记录日志
 *
 * @param mixed  $c			消息内容
 * @param string $f			日志文件
 * @param string $display	写文件同时是否在终端打印
 * @return boolean
 */
function g($c,$f='./logs/runtime.log',$display=true)
{
	$dir = dirname($f);
	if (!is_dir($dir)) mkdir($dir,0775,true);
    if (!file_exists($f)) touch($f);
    if (!is_writable($f)) chmod($f,0775);
    $time = date('Y-m-d H:i:s');
    $c = (is_array($c) || is_object($c)) ? serialize($c) : $c;
    $c = "[{$time}]\t{$c}\t\n";
    if ($display) echo $c;
    file_put_contents($f,$c,FILE_APPEND);
	return true;
}

/**
 * 获取变量
 * @param string $k
 * @param mixed $default
 * @return mixed
 */
function r($k, $default=null, $limit=array())
{
	if(!empty($limit) && !in_array($k,$limit)) return $default;
	if(isset($_REQUEST[$k]) && !empty($_REQUEST[$k])) $default = $_REQUEST[$k];
	return $default;
}

/**
 * 输出JSON结果
 * @param mixed $msg
 * @param boolean $exit
 * @return json string
 */
function jsonRet($msg, $exit=true)
{
	$msg = is_string($msg) ? array('msg'=>$msg) : $msg;
	if($exit){
		echo json_encode($msg);
		exit(0);
	}
	return json_encode($msg);
}

/**
 * 输出JSON错误
 * @param string $msg
 * @param int $code
 * @param boolean $exit
 * @return json string
 */
function jsonError($msg, $code=-1, $exit=true)
{
	$msg = array('code'=>$code, 'error'=>$msg);
	jsonRet($msg, $exit);
}
?>
